import java.util.Arrays;

public class Test1 {
    //二维数组
    public static void main1(String[] args) {
        int[] array1 = new int[]{1, 2, 3, 4, 5, 6};
        int[] array2 = new int[array1.length];

        //第一种拷贝
        for (int i = 0; i < array1.length; i++) {
            array2[i] = array1[i];
        }

        //第二种拷贝
        int[] array3 = Arrays.copyOf(array1, array1.length);

        //第三种拷贝 -- 克隆(产生一个副本)
        int[] array4 = array1.clone();

        //打印数组
        System.out.println(Arrays.toString(array1));
        System.out.println(Arrays.toString(array2));
        System.out.println(Arrays.toString(array3));
        System.out.println(Arrays.toString(array4));
    }

    public static void main2(String[] args) {

        //二维数组的定义方式
        int[][] array1 = new int[2][3];

        int[][] array2 = new int[][]{{1, 2, 3}, {4, 5, 6}};

        int[][] array3 = {{1, 2, 3}, {4, 5, 6}};

        //打印二维数组 -- 方法一
        for (int i = 0; i < 2; i++) {
            for (int j = 0; j < 3; j++) {
                System.out.print(array1[i][j] + " ");
            }
            System.out.println();
        }

        //打印二维数组 -- 方法二
        //System.out.println(Arrays.toString(array1)); -- 这里会打印地址

        //正确的运用操作数组的工具类来打印二维数组
        System.out.println(Arrays.deepToString(array1));

        //Java的二维数组完美的诠释了二维数组其实是特殊的一维数组

        //我们来验证一下
        System.out.println(array1[0]);
        System.out.println(array1[1]);

        System.out.println(Arrays.toString(array1[0]));
        System.out.println(Arrays.toString(array1[1]));

    }

    //Java的二维数组可以看成是指针数组

    public static void main3(String[] args) {
        int[][] array1 = new int[][]{{1, 2, 3}, {4, 5, 6}};

        //在了解原理之后再去遍历二维数组
        for (int i = 0; i < array1.length; i++) {
            for (int j = 0; j < array1[i].length; j++) {
                System.out.print(array1[i][j] + " ");
            }
            System.out.println();
        }

        System.out.println();

        //用范围for来遍历二维数组
        for (int[] array : array1) {
            for (int e : array) {
                System.out.print(e + " ");
            }
            System.out.println();
        }

        System.out.println();

        //最方便的打印 -- 输出一行修改不了格式
        System.out.println(Arrays.deepToString(array1));
    }

    public static void main(String[] args) {
        //Java中有一种不规则的数组 -- 可以省略掉列
        int[][] array1 = new int[2][];

        //给0下标和1下标开辟空间
        array1[0] = new int[3];
        array1[1] = new int[4];

        //此时0下标和1下标存的都是null -- 没有指定列的情况下
        System.out.println(array1[0]);
        System.out.println(array1[1]);

        //在了解原理之后再去遍历二维数组
        for (int i = 0; i < array1.length; i++) {
            for (int j = 0; j < array1[i].length; j++) {
                System.out.print(array1[i][j] + " ");
            }
            System.out.println();
        }

        System.out.println();

        System.out.println(Arrays.deepToString(array1));

        //所以不规则的二维数组可以指定列为几列 -- 每一个一维数组的长度是不一样的
    }

}
